#!/bin/sh

###############################################################################
##
##  HIGH VERBOSITY EXAMPLE
##
###############################################################################

# run from directory where this script is
cd `echo $0 | sed 's/\(.*\)\/.*/\1/'` # extract pathname
EXAMPLE_DIR=`pwd`

# check whether echo has the -e option
if test "`echo -e`" = "-e" ; then ECHO=echo ; else ECHO="echo -e" ; fi

$ECHO
$ECHO "$EXAMPLE_DIR : starting"
$ECHO
$ECHO "This example shows how to use cp.x to perform molecular dynamics"
$ECHO "in the presence of an electric field described through the"
$ECHO "modern theory of the polarization. The example shows how to"
$ECHO "calculate high-frequency and static dielectric constants and"
$ECHO "Born effective charges."

# set the needed environment variables
. ../../../environment_variables

# required executables and pseudopotentials
BIN_LIST="cp.x"
PSEUDO_LIST="O.pz-rrkjus.UPF Mg.pz-n-vbc.UPF"

$ECHO
$ECHO "  executables directory: $BIN_DIR"
$ECHO "  pseudo directory:      $PSEUDO_DIR"
$ECHO "  temporary directory:   $TMP_DIR"
$ECHO "  checking that needed directories and files exist...\c"

# check for directories
for DIR in "$BIN_DIR" "$PSEUDO_DIR" ; do
    if test ! -d $DIR ; then
        $ECHO
        $ECHO "ERROR: $DIR not existent or not a directory"
        $ECHO "Aborting"
        exit 1
    fi
done
for DIR in "$TMP_DIR" "$EXAMPLE_DIR/results" ; do
    if test ! -d $DIR ; then
        mkdir $DIR
    fi
done
cd $EXAMPLE_DIR/results

# check for executables
for FILE in $BIN_LIST ; do
    if test ! -x $BIN_DIR/$FILE ; then
        $ECHO
        $ECHO "ERROR: $BIN_DIR/$FILE not existent or not executable"
        $ECHO "Aborting"
        exit 1
    fi
done

# check for pseudopotentials
for FILE in $PSEUDO_LIST ; do
    if test ! -r $PSEUDO_DIR/$FILE ; then
       $ECHO
       $ECHO "Downloading $FILE to $PSEUDO_DIR...\c"
            $WGET $PSEUDO_DIR/$FILE $NETWORK_PSEUDO/$FILE 2> /dev/null         
    fi
    if test $? != 0; then
        $ECHO
        $ECHO "ERROR: $PSEUDO_DIR/$FILE not existent or not readable"
        $ECHO "Aborting"
        exit 1
    fi
done
$ECHO " done"

# how to run executables
CP_COMMAND="$PARA_PREFIX $BIN_DIR/cp.x $PARA_POSTFIX"
$ECHO
$ECHO "  running cp.x as: $CP_COMMAND"
$ECHO

# clean TMP_DIR
$ECHO "  cleaning $TMP_DIR...\c"
rm -rf $TMP_DIR/cp*
$ECHO " done"

# molecular dynamics calculation
cat > mgo.cp.cg.in << EOF
&CONTROL
  calculation = 'cp',
  restart_mode = 'from_scratch',
  nstep  = 1,
  iprint = 1,
  isave  = 1,
  tstress = .TRUE.,
  tprnfor = .TRUE.,
  prefix = 'mgo',
  tefield = .TRUE.
  pseudo_dir = '$PSEUDO_DIR/',
  outdir='$TMP_DIR/'
/

&SYSTEM
  ibrav = 1,
  celldm(1) = 15.912,
  celldm(2) = 0.0,
  celldm(3) = 0.0,
  celldm(4) = 0.0,
  celldm(5) = 0.0,
  celldm(6) = 0.0,
  nbnd=128,
  nat  =64,
  ntyp =2,
  ecutwfc = 20,
  ecutrho = 160,
  nr1b= 30, nr2b = 30, nr3b = 30,
  nspin=1,
/

&ELECTRONS
  emass = 1000.d0,
  emass_cutoff = 4.d0,
  orthogonalization = 'Gram-Schmidt',
  startingwfc = 'random',
  ampre = 0.02,
  tcg = .true.,
  passop=0.3,
  maxiter = 250,
  conv_thr=1.d-8
  epol = 3
  efield = 0.0
/

&IONS
  ion_dynamics = 'none',
  ion_damping = 0.,
  ion_positions = 'from_input',
  greasp=1.0,
  ion_radius(1) = 0.8d0,
  ion_temperature = 'not_controlled',
/

&CELL
  cell_dynamics = 'none',
/

ATOMIC_SPECIES
 O  12.01 O.pz-rrkjus.UPF
 Mg 24.30 Mg.pz-n-vbc.UPF
ATOMIC_POSITIONS (bohr)
Mg   0.066300000   0.066300000   0.066300000
Mg  4.044300000   4.044300000   0.066300000
Mg   4.044300000   0.066300000   4.044300000
Mg   0.066300000   4.044300000   4.044300000
Mg   0.066300000   0.066300000   8.022300000
Mg   4.044300000   4.044300000   8.022300000
Mg   4.044300000   0.066300000  12.000300000
Mg   0.066300000   4.044300000  12.000300000
Mg   0.066300000   8.022300000   0.066300000
Mg   4.044300000  12.000300000   0.066300000
Mg   4.044300000   8.022300000   4.044300000
Mg   0.066300000  12.000300000   4.044300000
Mg   0.066300000   8.022300000   8.022300000
Mg   4.044300000  12.000300000   8.022300000
Mg   4.044300000   8.022300000  12.000300000
Mg   0.066300000  12.000300000  12.000300000
Mg   8.022300000   0.066300000   0.066300000
Mg  12.000300000   4.044300000   0.066300000
Mg  12.000300000   0.066300000   4.044300000
Mg   8.022300000   4.044300000   4.044300000
Mg   8.022300000   0.066300000   8.022300000
Mg  12.000300000   4.044300000   8.022300000
Mg  12.000300000   0.066300000  12.000300000
Mg   8.022300000   4.044300000  12.000300000
Mg   8.022300000   8.022300000   0.066300000
Mg  12.000300000  12.000300000   0.066300000
Mg  12.000300000   8.022300000   4.044300000
Mg   8.022300000  12.000300000   4.044300000
Mg   8.022300000   8.022300000   8.022300000
Mg  12.000300000  12.000300000   8.022300000
Mg  12.000300000   8.022300000  12.000300000
Mg   8.022300000  12.000300000  12.000300000
O   0.066300000   0.066300000   4.044300000
O   4.044300000   4.044300000   4.044300000
O   4.044300000   0.066300000   8.022300000
O   0.066300000   4.044300000   8.022300000
O   0.066300000   0.066300000  12.000300000
O   4.044300000   4.044300000  12.000300000
O   4.044300000   0.066300000  15.978300000
O   0.066300000   4.044300000  15.978300000
O   0.066300000   8.022300000   4.044300000
O   4.044300000  12.000300000   4.044300000
O   4.044300000   8.022300000   8.022300000
O   0.066300000  12.000300000   8.022300000
O   0.066300000   8.022300000  12.000300000
O   4.044300000  12.000300000  12.000300000
O   4.044300000   8.022300000  15.978300000
O   0.066300000  12.000300000  15.978300000
O   8.022300000   0.066300000   4.044300000
O  12.000300000   4.044300000   4.044300000
O  12.000300000   0.066300000   8.022300000
O   8.022300000   4.044300000   8.022300000
O   8.022300000   0.066300000  12.000300000
O  12.000300000   4.044300000  12.000300000
O  12.000300000   0.066300000  15.978300000
O   8.022300000   4.044300000  15.978300000
O   8.022300000   8.022300000   4.044300000
O  12.000300000  12.000300000   4.044300000
O  12.000300000   8.022300000   8.022300000
O   8.022300000  12.000300000   8.022300000
O   8.022300000   8.022300000  12.000300000
O  12.000300000  12.000300000  12.000300000
O  12.000300000   8.022300000  15.978300000
O   8.022300000  12.000300000  15.978300000
EOF
$ECHO "  running the CG calculation for bulk MgO E_field=0. a.u. ...\c"
$CP_COMMAND < mgo.cp.cg.in > mgo.cp.cg.out
check_failure $?
$ECHO " done"

cat > mgo.cp.cg.efield.in << EOF
&CONTROL
  calculation = 'cp',
  restart_mode = 'restart',
  nstep  = 1,
  iprint = 1,
  isave  = 1,
  tstress = .FALSE.,
  tprnfor = .TRUE.,
  prefix = 'mgo',
  tefield = .TRUE.
  pseudo_dir = '$PSEUDO_DIR/',
  outdir='$TMP_DIR/'
/

&SYSTEM
  ibrav = 1,
  celldm(1) = 15.912,
  celldm(2) = 0.0,
  celldm(3) = 0.0,
  celldm(4) = 0.0,
  celldm(5) = 0.0,
  celldm(6) = 0.0,
  nbnd=128,
  nat  =64,
  ntyp =2,
  ecutwfc = 20,
  ecutrho = 160,
  nr1b= 30, nr2b = 30, nr3b = 30,
  nspin=1,
/

&ELECTRONS
  emass = 1000.d0,
  emass_cutoff = 4.d0,
  orthogonalization = 'Gram-Schmidt',
  startingwfc = 'random',
  ampre = 0.02,
  tcg = .true.,
  passop=0.3,
  maxiter = 250,
  conv_thr=1.d-8
  epol = 3
  efield = 0.001
/

&IONS
  ion_dynamics = 'none',
  ion_damping = 0.,
  ion_positions = 'from_input',
  greasp=1.0,
  ion_radius(1) = 0.8d0,
  ion_temperature = 'not_controlled',
/

&CELL
  cell_dynamics = 'none',
/

ATOMIC_SPECIES
 O  12.01 O.pz-rrkjus.UPF
 Mg 24.30 Mg.pz-n-vbc.UPF
ATOMIC_POSITIONS (bohr)
Mg   0.066300000   0.066300000   0.066300000
Mg  4.044300000   4.044300000   0.066300000
Mg   4.044300000   0.066300000   4.044300000
Mg   0.066300000   4.044300000   4.044300000
Mg   0.066300000   0.066300000   8.022300000
Mg   4.044300000   4.044300000   8.022300000
Mg   4.044300000   0.066300000  12.000300000
Mg   0.066300000   4.044300000  12.000300000
Mg   0.066300000   8.022300000   0.066300000
Mg   4.044300000  12.000300000   0.066300000
Mg   4.044300000   8.022300000   4.044300000
Mg   0.066300000  12.000300000   4.044300000
Mg   0.066300000   8.022300000   8.022300000
Mg   4.044300000  12.000300000   8.022300000
Mg   4.044300000   8.022300000  12.000300000
Mg   0.066300000  12.000300000  12.000300000
Mg   8.022300000   0.066300000   0.066300000
Mg  12.000300000   4.044300000   0.066300000
Mg  12.000300000   0.066300000   4.044300000
Mg   8.022300000   4.044300000   4.044300000
Mg   8.022300000   0.066300000   8.022300000
Mg  12.000300000   4.044300000   8.022300000
Mg  12.000300000   0.066300000  12.000300000
Mg   8.022300000   4.044300000  12.000300000
Mg   8.022300000   8.022300000   0.066300000
Mg  12.000300000  12.000300000   0.066300000
Mg  12.000300000   8.022300000   4.044300000
Mg   8.022300000  12.000300000   4.044300000
Mg   8.022300000   8.022300000   8.022300000
Mg  12.000300000  12.000300000   8.022300000
Mg  12.000300000   8.022300000  12.000300000
Mg   8.022300000  12.000300000  12.000300000
O   0.066300000   0.066300000   4.044300000
O   4.044300000   4.044300000   4.044300000
O   4.044300000   0.066300000   8.022300000
O   0.066300000   4.044300000   8.022300000
O   0.066300000   0.066300000  12.000300000
O   4.044300000   4.044300000  12.000300000
O   4.044300000   0.066300000  15.978300000
O   0.066300000   4.044300000  15.978300000
O   0.066300000   8.022300000   4.044300000
O   4.044300000  12.000300000   4.044300000
O   4.044300000   8.022300000   8.022300000
O   0.066300000  12.000300000   8.022300000
O   0.066300000   8.022300000  12.000300000
O   4.044300000  12.000300000  12.000300000
O   4.044300000   8.022300000  15.978300000
O   0.066300000  12.000300000  15.978300000
O   8.022300000   0.066300000   4.044300000
O  12.000300000   4.044300000   4.044300000
O  12.000300000   0.066300000   8.022300000
O   8.022300000   4.044300000   8.022300000
O   8.022300000   0.066300000  12.000300000
O  12.000300000   4.044300000  12.000300000
O  12.000300000   0.066300000  15.978300000
O   8.022300000   4.044300000  15.978300000
O   8.022300000   8.022300000   4.044300000
O  12.000300000  12.000300000   4.044300000
O  12.000300000   8.022300000   8.022300000
O   8.022300000  12.000300000   8.022300000
O   8.022300000   8.022300000  12.000300000
O  12.000300000  12.000300000  12.000300000
O  12.000300000   8.022300000  15.978300000
O   8.022300000  12.000300000  15.978300000
EOF
$ECHO "  running the CG calculation for bulk MgO E_field=0.001 a.u. ...\c"
$CP_COMMAND < mgo.cp.cg.efield.in > mgo.cp.cg.efield.out
check_failure $?
$ECHO " done"

cat > mgo.cp.damp.efield.in << EOF
&CONTROL
  calculation = 'cp',
  restart_mode = 'restart',
  nstep  = 20,
  iprint = 100,
  isave  = 100,
  tstress = .FALSE.,
  tprnfor = .TRUE.,
  prefix = 'mgo',
  tefield = .TRUE.,
  dt=10.,
  pseudo_dir = '$PSEUDO_DIR/',
  outdir='$TMP_DIR/'
/

&SYSTEM
  ibrav = 1,
  celldm(1) = 15.912,
  celldm(2) = 0.0,
  celldm(3) = 0.0,
  celldm(4) = 0.0,
  celldm(5) = 0.0,
  celldm(6) = 0.0,
  nbnd=128,
  nat  =64,
  ntyp =2,
  ecutwfc = 20,
  ecutrho = 160,
  nr1b= 30, nr2b = 30, nr3b = 30,
  nspin=1,
/

&ELECTRONS
  emass = 250.d0,
  emass_cutoff = 3.d0,
  electron_dynamics='damp', ortho_max=30
  electron_damping=0.05
  startingwfc = 'random',
  ampre = 0.02,
  epol = 3
  efield = 0.001
/

&IONS
  ion_dynamics = 'verlet',
  ion_damping = 0.
/

&CELL
  cell_dynamics = 'none',
/

ATOMIC_SPECIES
 O  1.0 O.pz-rrkjus.UPF
 Mg 1.0 Mg.pz-n-vbc.UPF
ATOMIC_POSITIONS (bohr)
Mg   0.066300000   0.066300000   0.066300000
Mg  4.044300000   4.044300000   0.066300000
Mg   4.044300000   0.066300000   4.044300000
Mg   0.066300000   4.044300000   4.044300000
Mg   0.066300000   0.066300000   8.022300000
Mg   4.044300000   4.044300000   8.022300000
Mg   4.044300000   0.066300000  12.000300000
Mg   0.066300000   4.044300000  12.000300000
Mg   0.066300000   8.022300000   0.066300000
Mg   4.044300000  12.000300000   0.066300000
Mg   4.044300000   8.022300000   4.044300000
Mg   0.066300000  12.000300000   4.044300000
Mg   0.066300000   8.022300000   8.022300000
Mg   4.044300000  12.000300000   8.022300000
Mg   4.044300000   8.022300000  12.000300000
Mg   0.066300000  12.000300000  12.000300000
Mg   8.022300000   0.066300000   0.066300000
Mg  12.000300000   4.044300000   0.066300000
Mg  12.000300000   0.066300000   4.044300000
Mg   8.022300000   4.044300000   4.044300000
Mg   8.022300000   0.066300000   8.022300000
Mg  12.000300000   4.044300000   8.022300000
Mg  12.000300000   0.066300000  12.000300000
Mg   8.022300000   4.044300000  12.000300000
Mg   8.022300000   8.022300000   0.066300000
Mg  12.000300000  12.000300000   0.066300000
Mg  12.000300000   8.022300000   4.044300000
Mg   8.022300000  12.000300000   4.044300000
Mg   8.022300000   8.022300000   8.022300000
Mg  12.000300000  12.000300000   8.022300000
Mg  12.000300000   8.022300000  12.000300000
Mg   8.022300000  12.000300000  12.000300000
O   0.066300000   0.066300000   4.044300000
O   4.044300000   4.044300000   4.044300000
O   4.044300000   0.066300000   8.022300000
O   0.066300000   4.044300000   8.022300000
O   0.066300000   0.066300000  12.000300000
O   4.044300000   4.044300000  12.000300000
O   4.044300000   0.066300000  15.978300000
O   0.066300000   4.044300000  15.978300000
O   0.066300000   8.022300000   4.044300000
O   4.044300000  12.000300000   4.044300000
O   4.044300000   8.022300000   8.022300000
O   0.066300000  12.000300000   8.022300000
O   0.066300000   8.022300000  12.000300000
O   4.044300000  12.000300000  12.000300000
O   4.044300000   8.022300000  15.978300000
O   0.066300000  12.000300000  15.978300000
O   8.022300000   0.066300000   4.044300000
O  12.000300000   4.044300000   4.044300000
O  12.000300000   0.066300000   8.022300000
O   8.022300000   4.044300000   8.022300000
O   8.022300000   0.066300000  12.000300000
O  12.000300000   4.044300000  12.000300000
O  12.000300000   0.066300000  15.978300000
O   8.022300000   4.044300000  15.978300000
O   8.022300000   8.022300000   4.044300000
O  12.000300000  12.000300000   4.044300000
O  12.000300000   8.022300000   8.022300000
O   8.022300000  12.000300000   8.022300000
O   8.022300000   8.022300000  12.000300000
O  12.000300000  12.000300000  12.000300000
O  12.000300000   8.022300000  15.978300000
O   8.022300000  12.000300000  15.978300000
EOF
$ECHO "  running the CP- damped MD calculation for bulk MgO E_field=0.001 a.u. ...\c"
$CP_COMMAND < mgo.cp.damp.efield.in > mgo.cp.damp.efield.out
check_failure $?
$ECHO " done"

$ECHO
$ECHO "$EXAMPLE_DIR : done"
